package com.pussinboots.morning.sync.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Builder;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.experimental.Tolerate;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * <p>
 * 订单表
 * </p>
 *
 * @author BaoZhou
 * @since 2019-09-22
 */
@Data
//支持链式风格
@Accessors(chain = true)
@Builder
@TableName("os_order")
public class Order extends Model<Order> {

    private static final long serialVersionUID = 1L;

    /**
     * 解决@Data与@Builder一起使用，实体类没有无参构造函数的坑
     * 此注解让lombok假装不知道有此方法，这样就不会与@Data产生冲突
     */
    @Tolerate
    public Order(){};

    /**
     * 订单ID
     */
    @TableId(value = "order_id", type = IdType.AUTO)
    private Long orderId;

    /**
     * 订单编号,系统生成
     */
    private Long orderNumber;

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 支付方式 0=线下支付，1=在线支付
     */
    private Integer payType;

    /**
     * 配送时间 1=不限送货时间，2=工作日送货，3=双休日、假日送货
     */
    private Integer shipmentTime;

    /**
     * 配送方式 0=快递配送（免运费），1=快递配送（运费）
     */
    private Integer shipmentType;

    /**
     * 快递费
     */
    private BigDecimal shipmentAmount;

    /**
     * 支付方式 1=不开发票，2=电子发票，3=普通发票
     */
    private Integer invoiceType;

    /**
     * 发票抬头
     */
    private String invoiceTitle;

    /**
     * 订单状态 0:待付款，1:已付款，2:待审核，3:已发货，4:订单关闭，5:订单完成。
     */
    private Integer orderStatus;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;

    /**
     * 订单金额
     */
    private BigDecimal orderAmount;

    /**
     * 订单积分
     */
    private Integer orderScore;

    /**
     * 支付金额 = 订单金额 + 快递费
     */
    private BigDecimal payAmount;

    /**
     * 原价
     */
    private BigDecimal orderOldAmount;

    /**
     * 商品总数量
     */
    private Integer buyNumber;

    /**
     * 地区码（此地区码是标准行政地区码与收货地址的地区码不是一回事）
     */
    private Integer areaCode;

    /**
     * 优惠券信息（名称）
     */
    private String couponName;

    /**
     * 优惠券抵用的金额
     */
    private BigDecimal couponAmount;

    /**
     * 优惠券ID
     */
    private Long couponId;

    /**
     * 对公账户审核用的图片地址
     */
    private String checkImg;

    @Override
    protected Serializable pkVal() {
        return this.orderId;
    }
}